/**
 * 切面原理
 * 动态代理核心实现类：AnnotationAwareAspectJAutoProxyCreator
 * 解析XML动态代理自定义标签类: AopNamespaceHandle
 * XML配置方式时，时会在启动时去解析XML中的配置文件。自定义标签，在生成Bean对象时去判断是否需要生成该代理对象。
 * 1.getBean() 生成对象时可以提前生成代理对象，因为这里可能有循环依赖的问题。如果被依赖的对象是需要生成代理对象的，那这里就会提前生成。
 * 2.getBean() 生成对象完成后在执行init方法时，执行BeanPostProcess后置处理器时可被替换成代理对象返回
 * 自动配置方式: AutoAopConfiguration
 * 代理模式：JDK动态代理或者CGLIB
 *         JDK动态代理只会对有接口的实现类去生成代理对象，并且代理的方法必须是public且是接口中定义的方法
 *         CGLIB动态代理是运行时生成字节码，去实现目标对象，重写目标方法。可以代理不是private方法，也可以代理非接口中定义的方法
 *         为某一个方法生成代理对象，在执行目标方法时去执行增强逻辑。而不是对整个目标对象的所有方法都执行增强。
 * 动态代理配置属性: proxy-target-class: true or false 是否强制使用CGLIB方式生成代理对象
 *                expose-proxy: true or false 是否暴露代理对象。此配置可以解决动态代理方法内部调用时，失效的问题。
 * Bean实例是否会生成代理对象：并不是所有由spring管理的Bean都会生成代理对象，是需要条件决定的。
 * 比如一个service对象生成代理对象，它只会生成一个代理对象。而针对每个不同方法所需要增加的逻辑，是用代理方法与代理类检索出对应的增强逻辑 Advices.
 */
package com.wzw.springboot.principle.aop;